| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277 | 1
1
2
1
1
1
1
280
1
1
2
2
2
2
2
2
2
1
2
2
2
2
1
2
2
2
2
2
2
2
2
2
1
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
1
1
| System.register(['core-js', './util', 'aurelia-binding'], function (_export) {
'use strict';
var core, hyphenate, bindingMode, BindableProperty, BehaviorPropertyObserver;
function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function getObserver(behavior, instance, name) {
var lookup = instance.__observers__;
if (lookup === undefined) {
lookup = behavior.observerLocator.getOrCreateObserversLookup(instance);
behavior.ensurePropertiesDefined(instance, lookup);
}
return lookup[name];
}
return {
setters: [function (_coreJs) {
core = _coreJs['default'];
}, function (_util) {
hyphenate = _util.hyphenate;
}, function (_aureliaBinding) {
bindingMode = _aureliaBinding.bindingMode;
}],
execute: function () {
BindableProperty = (function () {
function BindableProperty(nameOrConfig) {
_classCallCheck(this, BindableProperty);
Iif (typeof nameOrConfig === 'string') {
this.name = nameOrConfig;
} else {
Object.assign(this, nameOrConfig);
}
this.attribute = this.attribute || hyphenate(this.name);
this.defaultBindingMode = this.defaultBindingMode || bindingMode.oneWay;
this.changeHandler = this.changeHandler || null;
this.owner = null;
}
BindableProperty.prototype.registerWith = function registerWith(target, behavior, descriptor) {
behavior.properties.push(this);
behavior.attributes[this.attribute] = this;
this.owner = behavior;
Iif (descriptor) {
this.descriptor = descriptor;
return this.configureDescriptor(behavior, descriptor);
}
};
BindableProperty.prototype.configureDescriptor = function configureDescriptor(behavior, descriptor) {
var name = this.name;
descriptor.configurable = true;
descriptor.enumerable = true;
Iif ('initializer' in descriptor) {
this.defaultValue = descriptor.initializer;
delete descriptor.initializer;
delete descriptor.writable;
}
Iif ('value' in descriptor) {
this.defaultValue = descriptor.value;
delete descriptor.value;
delete descriptor.writable;
}
descriptor.get = function () {
return getObserver(behavior, this, name).getValue();
};
descriptor.set = function (value) {
getObserver(behavior, this, name).setValue(value);
};
descriptor.get.getObserver = function (obj) {
return getObserver(behavior, obj, name);
};
return descriptor;
};
BindableProperty.prototype.defineOn = function defineOn(target, behavior) {
var name = this.name,
handlerName;
Eif (this.changeHandler === null) {
handlerName = name + 'Changed';
Iif (handlerName in target.prototype) {
this.changeHandler = handlerName;
}
}
Eif (!this.descriptor) {
Object.defineProperty(target.prototype, name, this.configureDescriptor(behavior, {}));
}
};
BindableProperty.prototype.createObserver = function createObserver(executionContext) {
var _this = this;
var selfSubscriber = null,
defaultValue = this.defaultValue,
initialValue;
if (this.hasOptions) {
return;
}
if (this.changeHandler !== null) {
selfSubscriber = function (newValue, oldValue) {
return executionContext[_this.changeHandler](newValue, oldValue);
};
}
if (defaultValue !== undefined) {
initialValue = typeof defaultValue === 'function' ? defaultValue.call(executionContext) : defaultValue;
}
return new BehaviorPropertyObserver(this.owner.taskQueue, executionContext, this.name, selfSubscriber, initialValue);
};
BindableProperty.prototype.initialize = function initialize(executionContext, observerLookup, attributes, behaviorHandlesBind, boundProperties) {
var selfSubscriber,
observer,
attribute,
defaultValue = this.defaultValue;
if (this.isDynamic) {
for (var key in attributes) {
this.createDynamicProperty(executionContext, observerLookup, behaviorHandlesBind, key, attributes[key], boundProperties);
}
} else if (!this.hasOptions) {
observer = observerLookup[this.name];
if (attributes !== undefined) {
selfSubscriber = observer.selfSubscriber;
attribute = attributes[this.attribute];
if (behaviorHandlesBind) {
observer.selfSubscriber = null;
}
if (typeof attribute === 'string') {
executionContext[this.name] = attribute;
observer.call();
} else if (attribute) {
boundProperties.push({ observer: observer, binding: attribute.createBinding(executionContext) });
} else if (defaultValue !== undefined) {
observer.call();
}
observer.selfSubscriber = selfSubscriber;
}
observer.publishing = true;
}
};
BindableProperty.prototype.createDynamicProperty = function createDynamicProperty(executionContext, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {
var changeHandlerName = name + 'Changed',
selfSubscriber = null,
observer,
info;
if (changeHandlerName in executionContext) {
selfSubscriber = function (newValue, oldValue) {
return executionContext[changeHandlerName](newValue, oldValue);
};
} else if ('dynamicPropertyChanged' in executionContext) {
selfSubscriber = function (newValue, oldValue) {
return executionContext['dynamicPropertyChanged'](name, newValue, oldValue);
};
}
observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, executionContext, name, selfSubscriber);
Object.defineProperty(executionContext, name, {
configurable: true,
enumerable: true,
get: observer.getValue.bind(observer),
set: observer.setValue.bind(observer)
});
if (behaviorHandlesBind) {
observer.selfSubscriber = null;
}
if (typeof attribute === 'string') {
executionContext[name] = attribute;
observer.call();
} else if (attribute) {
info = { observer: observer, binding: attribute.createBinding(executionContext) };
boundProperties.push(info);
}
observer.publishing = true;
observer.selfSubscriber = selfSubscriber;
};
return BindableProperty;
})();
_export('BindableProperty', BindableProperty);
BehaviorPropertyObserver = (function () {
function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {
_classCallCheck(this, BehaviorPropertyObserver);
this.taskQueue = taskQueue;
this.obj = obj;
this.propertyName = propertyName;
this.callbacks = [];
this.notqueued = true;
this.publishing = false;
this.selfSubscriber = selfSubscriber;
this.currentValue = this.oldValue = initialValue;
}
BehaviorPropertyObserver.prototype.getValue = function getValue() {
return this.currentValue;
};
BehaviorPropertyObserver.prototype.setValue = function setValue(newValue) {
var oldValue = this.currentValue;
if (oldValue != newValue) {
if (this.publishing && this.notqueued) {
this.notqueued = false;
this.taskQueue.queueMicroTask(this);
}
this.oldValue = oldValue;
this.currentValue = newValue;
}
};
BehaviorPropertyObserver.prototype.call = function call() {
var callbacks = this.callbacks,
i = callbacks.length,
oldValue = this.oldValue,
newValue = this.currentValue;
this.notqueued = true;
if (newValue != oldValue) {
if (this.selfSubscriber !== null) {
this.selfSubscriber(newValue, oldValue);
}
while (i--) {
callbacks[i](newValue, oldValue);
}
this.oldValue = newValue;
}
};
BehaviorPropertyObserver.prototype.subscribe = function subscribe(callback) {
var callbacks = this.callbacks;
callbacks.push(callback);
return function () {
callbacks.splice(callbacks.indexOf(callback), 1);
};
};
return BehaviorPropertyObserver;
})();
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL2JpbmRhYmxlLXByb3BlcnR5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztvQ0FlYSxnQkFBZ0IsRUF1S3ZCLHdCQUF3Qjs7OztBQWxMOUIsV0FBUyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUM7QUFDNUMsUUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQzs7QUFFcEMsUUFBRyxNQUFNLEtBQUssU0FBUyxFQUFDO0FBQ3RCLFlBQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFLGNBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDcEQ7O0FBRUQsV0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDckI7Ozs7Ozt3QkFaTyxTQUFTOztvQ0FDVCxXQUFXOzs7QUFhTixzQkFBZ0I7QUFDaEIsaUJBREEsZ0JBQWdCLENBQ2YsWUFBWSxFQUFDO2dDQURkLGdCQUFnQjs7QUFFekIsY0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUM7QUFDbEMsZ0JBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1dBQzFCLE1BQUk7QUFDSCxrQkFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7V0FDbkM7O0FBRUQsY0FBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEQsY0FBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDO0FBQ3hFLGNBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEs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Q0FBQztBQUN6QixnQkFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7V0FDOUI7U0FDRjs7QUE1QkcsZ0NBQXdCLFdBOEI1QixJQUFJLEdBQUEsZ0JBQUU7QUFDSixjQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztjQUMxQixDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07Y0FDcEIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRO2NBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDOztBQUVqQyxjQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7QUFFdEIsY0FBRyxRQUFRLElBQUksUUFBUSxFQUFDO0FBQ3RCLGdCQUFHLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFDO0FBQzlCLGtCQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN6Qzs7QUFFRCxtQkFBTSxDQUFDLEVBQUUsRUFBRTtBQUNULHVCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDOztBQUVELGdCQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztXQUMxQjtTQUNGOztBQWpERyxnQ0FBd0IsV0FtRDVCLFNBQVMsR0FBQSxtQkFBQyxRQUFRLEVBQUM7QUFDakIsY0FBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMvQixtQkFBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QixpQkFBTyxZQUFVO0FBQ2YscUJBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUNsRCxDQUFDO1NBQ0g7O2VBekRHLHdCQUF3QiIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS90ZW1wbGF0aW5nL3NyYy9iaW5kYWJsZS1wcm9wZXJ0eS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb3JlIGZyb20gJ2NvcmUtanMnO1xuaW1wb3J0IHtoeXBoZW5hdGV9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2JpbmRpbmdNb2RlfSBmcm9tICdhdXJlbGlhLWJpbmRpbmcnO1xuXG5mdW5jdGlvbiBnZXRPYnNlcnZlcihiZWhhdmlvciwgaW5zdGFuY2UsIG5hbWUpe1xuICB2YXIgbG9va3VwID0gaW5zdGFuY2UuX19vYnNlcnZlcnNfXztcblxuICBpZihsb29rdXAgPT09IHVuZGVmaW5lZCl7XG4gICAgbG9va3VwID0gYmVoYXZpb3Iub2JzZXJ2ZXJMb2NhdG9yLmdldE9yQ3JlYXRlT2JzZXJ2ZXJzTG9va3VwKGluc3RhbmNlKTtcbiAgICBiZWhhdmlvci5lbnN1cmVQcm9wZXJ0aWVzRGVmaW5lZChpbnN0YW5jZSwgbG9va3VwKTtcbiAgfVxuXG4gIHJldHVybiBsb29rdXBbbmFtZV07XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kYWJsZVByb3BlcnR5IHtcbiAgY29uc3RydWN0b3IobmFtZU9yQ29uZmlnKXtcbiAgICBpZih0eXBlb2YgbmFtZU9yQ29uZmlnID09PSAnc3RyaW5nJyl7XG4gICAgICB0aGlzLm5hbWUgPSBuYW1lT3JDb25maWc7XG4gICAgfWVsc2V7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG5hbWVPckNvbmZpZyk7XG4gICAgfVxuXG4gICAgdGhpcy5hdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZSB8fCBoeXBoZW5hdGUodGhpcy5uYW1lKTtcbiAgICB0aGlzLmRlZmF1bHRCaW5kaW5nTW9kZSA9IHRoaXMuZGVmYXVsdEJpbmRpbmdNb2RlIHx8IGJpbmRpbmdNb2RlLm9uZVdheTtcbiAgICB0aGlzLmNoYW5nZUhhbmRsZXIgPSB0aGlzLmNoYW5nZUhhbmRsZXIgfHwgbnVsbDtcbiAgICB0aGlzLm93bmVyID0gbnVsbDtcbiAgfVxuXG4gIHJlZ2lzdGVyV2l0aCh0YXJnZXQsIGJlaGF2aW9yLCBkZXNjcmlwdG9yKXtcbiAgICBiZWhhdmlvci5wcm9wZXJ0aWVzLnB1c2godGhpcyk7XG4gICAgYmVoYXZpb3IuYXR0cmlidXRlc1t0aGlzLmF0dHJpYnV0ZV0gPSB0aGlzO1xuICAgIHRoaXMub3duZXIgPSBiZWhhdmlvcjtcblxuICAgIGlmKGRlc2NyaXB0b3Ipe1xuICAgICAgdGhpcy5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyZURlc2NyaXB0b3IoYmVoYXZpb3IsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpZ3VyZURlc2NyaXB0b3IoYmVoYXZpb3IsIGRlc2NyaXB0b3Ipe1xuICAgIHZhciBuYW1lID0gdGhpcy5uYW1lO1xuXG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cbiAgICBpZignaW5pdGlhbGl6ZXInIGluIGRlc2NyaXB0b3Ipe1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZXNjcmlwdG9yLmluaXRpYWxpemVyO1xuICAgICAgZGVsZXRlIGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXI7XG4gICAgICBkZWxldGUgZGVzY3JpcHRvci53cml0YWJsZTtcbiAgICB9XG5cbiAgICBpZigndmFsdWUnIGluIGRlc2NyaXB0b3Ipe1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgZGVsZXRlIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgICBkZWxldGUgZGVzY3JpcHRvci53cml0YWJsZTtcbiAgICB9XG5cbiAgICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uKCl7XG4gICAgICByZXR1cm4gZ2V0T2JzZXJ2ZXIoYmVoYXZpb3IsIHRoaXMsIG5hbWUpLmdldFZhbHVlKCk7XG4gICAgfTtcblxuICAgIGRlc2NyaXB0b3Iuc2V0ID0gZnVuY3Rpb24odmFsdWUpe1xuICAgICAgZ2V0T2JzZXJ2ZXIoYmVoYXZpb3IsIHRoaXMsIG5hbWUpLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgZGVzY3JpcHRvci5nZXQuZ2V0T2JzZXJ2ZXIgPSBmdW5jdGlvbihvYmope1xuICAgICAgcmV0dXJuIGdldE9ic2VydmVyKGJlaGF2aW9yLCBvYmosIG5hbWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfVxuXG4gIGRlZmluZU9uKHRhcmdldCwgYmVoYXZpb3Ipe1xuICAgIHZhciBuYW1lID0gdGhpcy5uYW1lLFxuICAgICAgICBoYW5kbGVyTmFtZTtcblxuICAgIGlmKHRoaXMuY2hhbmdlSGFuZGxlciA9PT0gbnVsbCl7XG4gICAgICBoYW5kbGVyTmFtZSA9IG5hbWUgKyAnQ2hhbmdlZCc7XG4gICAgICBpZihoYW5kbGVyTmFtZSBpbiB0YXJnZXQucHJvdG90eXBlKXtcbiAgICAgICAgdGhpcy5jaGFuZ2VIYW5kbGVyID0gaGFuZGxlck5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXRoaXMuZGVzY3JpcHRvcil7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LnByb3RvdHlwZSwgbmFtZSwgdGhpcy5jb25maWd1cmVEZXNjcmlwdG9yKGJlaGF2aW9yLCB7fSkpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZU9ic2VydmVyKGV4ZWN1dGlvbkNvbnRleHQpe1xuICAgIHZhciBzZWxmU3Vic2NyaWJlciA9IG51bGwsIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlLCBpbml0aWFsVmFsdWU7XG5cbiAgICBpZih0aGlzLmhhc09wdGlvbnMpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKHRoaXMuY2hhbmdlSGFuZGxlciAhPT0gbnVsbCl7XG4gICAgICBzZWxmU3Vic2NyaWJlciA9IChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IGV4ZWN1dGlvbkNvbnRleHRbdGhpcy5jaGFuZ2VIYW5kbGVyXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cblxuICAgIGlmKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUuY2FsbChleGVjdXRpb25Db250ZXh0KSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEJlaGF2aW9yUHJvcGVydHlPYnNlcnZlcih0aGlzLm93bmVyLnRhc2tRdWV1ZSwgZXhlY3V0aW9uQ29udGV4dCwgdGhpcy5uYW1lLCBzZWxmU3Vic2NyaWJlciwgaW5pdGlhbFZhbHVlKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoZXhlY3V0aW9uQ29udGV4dCwgb2JzZXJ2ZXJMb29rdXAsIGF0dHJpYnV0ZXMsIGJlaGF2aW9ySGFuZGxlc0JpbmQsIGJvdW5kUHJvcGVydGllcyl7XG4gICAgdmFyIHNlbGZTdWJzY3JpYmVyLCBvYnNlcnZlciwgYXR0cmlidXRlLCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmKHRoaXMuaXNEeW5hbWljKXtcbiAgICAgIGZvcihsZXQga2V5IGluIGF0dHJpYnV0ZXMpe1xuICAgICAgICB0aGlzLmNyZWF0ZUR5bmFtaWNQcm9wZXJ0eShleGVjdXRpb25Db250ZXh0LCBvYnNlcnZlckxvb2t1cCwgYmVoYXZpb3JIYW5kbGVzQmluZCwga2V5LCBhdHRyaWJ1dGVzW2tleV0sIGJvdW5kUHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKCF0aGlzLmhhc09wdGlvbnMpe1xuICAgICAgb2JzZXJ2ZXIgPSBvYnNlcnZlckxvb2t1cFt0aGlzLm5hbWVdO1xuXG4gICAgICBpZihhdHRyaWJ1dGVzICE9PSB1bmRlZmluZWQpe1xuICAgICAgICBzZWxmU3Vic2NyaWJlciA9IG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyO1xuICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW3RoaXMuYXR0cmlidXRlXTtcblxuICAgICAgICBpZihiZWhhdmlvckhhbmRsZXNCaW5kKXtcbiAgICAgICAgICBvYnNlcnZlci5zZWxmU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgYXR0cmlidXRlID09PSAnc3RyaW5nJyl7XG4gICAgICAgICAgZXhlY3V0aW9uQ29udGV4dFt0aGlzLm5hbWVdID0gYXR0cmlidXRlO1xuICAgICAgICAgIG9ic2VydmVyLmNhbGwoKTtcbiAgICAgICAgfWVsc2UgaWYoYXR0cmlidXRlKXtcbiAgICAgICAgICBib3VuZFByb3BlcnRpZXMucHVzaCh7b2JzZXJ2ZXI6b2JzZXJ2ZXIsIGJpbmRpbmc6YXR0cmlidXRlLmNyZWF0ZUJpbmRpbmcoZXhlY3V0aW9uQ29udGV4dCl9KTtcbiAgICAgICAgfWVsc2UgaWYoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIG9ic2VydmVyLmNhbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLnNlbGZTdWJzY3JpYmVyID0gc2VsZlN1YnNjcmliZXI7XG4gICAgICB9XG5cbiAgICAgIG9ic2VydmVyLnB1Ymxpc2hpbmcgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUR5bmFtaWNQcm9wZXJ0eShleGVjdXRpb25Db250ZXh0LCBvYnNlcnZlckxvb2t1cCwgYmVoYXZpb3JIYW5kbGVzQmluZCwgbmFtZSwgYXR0cmlidXRlLCBib3VuZFByb3BlcnRpZXMpe1xuICAgIHZhciBjaGFuZ2VIYW5kbGVyTmFtZSA9IG5hbWUgKyAnQ2hhbmdlZCcsXG4gICAgICAgIHNlbGZTdWJzY3JpYmVyID0gbnVsbCwgb2JzZXJ2ZXIsIGluZm87XG5cbiAgICBpZihjaGFuZ2VIYW5kbGVyTmFtZSBpbiBleGVjdXRpb25Db250ZXh0KXtcbiAgICAgIHNlbGZTdWJzY3JpYmVyID0gKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gZXhlY3V0aW9uQ29udGV4dFtjaGFuZ2VIYW5kbGVyTmFtZV0obmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKCdkeW5hbWljUHJvcGVydHlDaGFuZ2VkJyBpbiBleGVjdXRpb25Db250ZXh0KSB7XG4gICAgICBzZWxmU3Vic2NyaWJlciA9IChuZXdWYWx1ZSwgb2xkVmFsdWUpID0+IGV4ZWN1dGlvbkNvbnRleHRbJ2R5bmFtaWNQcm9wZXJ0eUNoYW5nZWQnXShuYW1lLCBuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cblxuICAgIG9ic2VydmVyID0gb2JzZXJ2ZXJMb29rdXBbbmFtZV0gPSBuZXcgQmVoYXZpb3JQcm9wZXJ0eU9ic2VydmVyKFxuICAgICAgICB0aGlzLm93bmVyLnRhc2tRdWV1ZSxcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2VsZlN1YnNjcmliZXJcbiAgICAgICAgKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleGVjdXRpb25Db250ZXh0LCBuYW1lLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBvYnNlcnZlci5nZXRWYWx1ZS5iaW5kKG9ic2VydmVyKSxcbiAgICAgIHNldDogb2JzZXJ2ZXIuc2V0VmFsdWUuYmluZChvYnNlcnZlcilcbiAgICB9KTtcblxuICAgIGlmKGJlaGF2aW9ySGFuZGxlc0JpbmQpe1xuICAgICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmKHR5cGVvZiBhdHRyaWJ1dGUgPT09ICdzdHJpbmcnKXtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHRbbmFtZV0gPSBhdHRyaWJ1dGU7XG4gICAgICBvYnNlcnZlci5jYWxsKCk7XG4gICAgfWVsc2UgaWYoYXR0cmlidXRlKXtcbiAgICAgIGluZm8gPSB7b2JzZXJ2ZXI6b2JzZXJ2ZXIsIGJpbmRpbmc6YXR0cmlidXRlLmNyZWF0ZUJpbmRpbmcoZXhlY3V0aW9uQ29udGV4dCl9O1xuICAgICAgYm91bmRQcm9wZXJ0aWVzLnB1c2goaW5mbyk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZXIucHVibGlzaGluZyA9IHRydWU7XG4gICAgb2JzZXJ2ZXIuc2VsZlN1YnNjcmliZXIgPSBzZWxmU3Vic2NyaWJlcjtcbiAgfVxufVxuXG5jbGFzcyBCZWhhdmlvclByb3BlcnR5T2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3Rvcih0YXNrUXVldWUsIG9iaiwgcHJvcGVydHlOYW1lLCBzZWxmU3Vic2NyaWJlciwgaW5pdGlhbFZhbHVlKXtcbiAgICB0aGlzLnRhc2tRdWV1ZSA9IHRhc2tRdWV1ZTtcbiAgICB0aGlzLm9iaiA9IG9iajtcbiAgICB0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICAgIHRoaXMubm90cXVldWVkID0gdHJ1ZTtcbiAgICB0aGlzLnB1Ymxpc2hpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGZTdWJzY3JpYmVyID0gc2VsZlN1YnNjcmliZXI7XG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0aGlzLm9sZFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICB9XG5cbiAgZ2V0VmFsdWUoKXtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBzZXRWYWx1ZShuZXdWYWx1ZSl7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICBpZihvbGRWYWx1ZSAhPSBuZXdWYWx1ZSl7XG4gICAgICBpZih0aGlzLnB1Ymxpc2hpbmcgJiYgdGhpcy5ub3RxdWV1ZWQpe1xuICAgICAgICB0aGlzLm5vdHF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhc2tRdWV1ZS5xdWV1ZU1pY3JvVGFzayh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBjYWxsKCl7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLFxuICAgICAgICBpID0gY2FsbGJhY2tzLmxlbmd0aCxcbiAgICAgICAgb2xkVmFsdWUgPSB0aGlzLm9sZFZhbHVlLFxuICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgdGhpcy5ub3RxdWV1ZWQgPSB0cnVlO1xuXG4gICAgaWYobmV3VmFsdWUgIT0gb2xkVmFsdWUpe1xuICAgICAgaWYodGhpcy5zZWxmU3Vic2NyaWJlciAhPT0gbnVsbCl7XG4gICAgICAgIHRoaXMuc2VsZlN1YnNjcmliZXIobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUoaS0tKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShuZXdWYWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlKGNhbGxiYWNrKXtcbiAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3M7XG4gICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbigpe1xuICAgICAgY2FsbGJhY2tzLnNwbGljZShjYWxsYmFja3MuaW5kZXhPZihjYWxsYmFjayksIDEpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ== |